package com.zxw.xuechengproject;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Arrays;

/**
 * MyBatis-Plus 代码生成类

 * 用这个生成代码666666666666666
 *
 *
 *
 */
public class ContentCodeGenerator {

	// TODO 修改服务名以及数据表名
	//这个地方是需要修改的，会有生成的表明
	//todo  第2个需要修改的地方
	private static final String SERVICE_NAME = "Response";

	//数据库账号
	private static final String DATA_SOURCE_USER_NAME  = "root";
	//数据库密码
	private static final String DATA_SOURCE_PASSWORD  = "123456";
	//生成的表
	//todo  第2个需要修改的地方
	private static final String[] TABLE_NAMES = new String[]{
//			"mq_message",
//			"mq_message_history"
//			 "course_base",
//			 "course_market",
//			 "teachplan",
//			 "teachplan_media",
//			 "course_teacher",
//			"course_category"
//			"course_base"
//			"course_market",
//			"course_teacher",
//			"course_category",
//			"teachplan",
//			"teachplan_media",
//			"course_publish",
			"ai_chat_response"
//			"course_publish_pre"

	};

	// TODO 默认生成entity，需要生成DTO修改此变量
	// 一般情况下要先生成 DTO类 然后修改此参数再生成 PO 类。
	private static final Boolean IS_DTO = false;

	public static void main(String[] args) {
		// 代码生成器
		AutoGenerator mpg = new AutoGenerator();
		// 选择 freemarker 引擎，默认 Velocity
		mpg.setTemplateEngine(new FreemarkerTemplateEngine());
		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		gc.setFileOverride(true);
		//生成路径
		//todo  第3个需要修改的地方
//		gc.setOutputDir(System.getProperty("user.dir") + "/xuecheng-plus-generator/src/main/java");
		gc.setOutputDir("D:\\桌面\\zxw\\006-代码生成器-加入版本管理-git管理-正常运行\\xuecheng-plus-generator\\src\\main\\java\\com\\xuecheng\\generator" + "/src/main/java");
		gc.setAuthor("zxw");
		gc.setOpen(false);
		gc.setSwagger2(false);
		gc.setServiceName("%sService");
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);

		if (IS_DTO) {
			gc.setSwagger2(true);
			gc.setEntityName("%sDTO");
		}
		mpg.setGlobalConfig(gc);

		// 数据库配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setDbType(DbType.MYSQL);
		//时时刻刻修改
/*原始的
		dsc.setUrl("jdbc:mysql://localhost/xuecheng" + SERVICE_NAME
				+ "?serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=utf8");
*/

//我自己 的
		//todo  第4个需要修改的地方-注意名称是中划线不是下划线
		dsc.setUrl("jdbc:mysql://localhost:3306/guigu-oa" + "?serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=utf8");
//		dsc.setDriverName("com.mysql.jdbc.Driver");
		dsc.setDriverName("com.mysql.cj.jdbc.Driver");
		dsc.setUsername(DATA_SOURCE_USER_NAME);
		dsc.setPassword(DATA_SOURCE_PASSWORD);
		mpg.setDataSource(dsc);

		// 包配置
		PackageConfig pc = new PackageConfig();
		pc.setModuleName(SERVICE_NAME);
		pc.setParent("com.xuecheng");

		pc.setServiceImpl("service.impl");
		pc.setXml("mapper");
		pc.setEntity("model.entity");
		mpg.setPackageInfo(pc);


		// 设置模板
		TemplateConfig tc = new TemplateConfig();
		mpg.setTemplate(tc);

		// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		strategy.setNaming(NamingStrategy.underline_to_camel);
		strategy.setColumnNaming(NamingStrategy.underline_to_camel);
		strategy.setEntityLombokModel(true);
		strategy.setRestControllerStyle(true);
		strategy.setInclude(TABLE_NAMES);
		strategy.setControllerMappingHyphenStyle(true);
//原本的下面是我修改的		strategy.setTablePrefix(pc.getModuleName() + "_");
		//todo  第5个需要修改的地方-去除前缀
		strategy.setTablePrefix("ai_chat_");
		// Boolean类型字段是否移除is前缀处理
		strategy.setEntityBooleanColumnRemoveIsPrefix(true);
		strategy.setRestControllerStyle(true);

		// 自动填充字段配置
		strategy.setTableFillList(Arrays.asList(
				new TableFill("create_date", FieldFill.INSERT),
				new TableFill("change_date", FieldFill.INSERT_UPDATE),
				new TableFill("modify_date", FieldFill.UPDATE)
		));
		mpg.setStrategy(strategy);
		System.out.println("------------代码生成成功----------------");
		mpg.execute();
	}

}
